package varybxb

import (
	"fmt"
	"reflect"
)

// 定义变量:定义变量有5种方式
func TestVar() {
	// 声明一个变量
	var abc string
	fmt.Println("声明变量abc:", abc)

	// 方式1：变量的定义格式: var 变量名 类型 = 表达式或值
	var name = "ybxb"  // 默认推断出来是string类型
	var age int32 = 12 // 默认类型是int
	var isOK bool      // 布尔类型,默认值是false
	// 注意:go语言中的语法是严格的，如果声明了变量，但不使用是会报错的。
	fmt.Println(name, age, isOK)

	// 方式2：自动推测类型
	var sex = "男"
	var has = false
	fmt.Printf("sex的类型%T,值是%v, has的类型%T\n", sex, sex, has) // \n:打印换行
	fmt.Println(reflect.TypeOf(sex))                       // 打印sex的类型，需要导入reflect包

	// 方式3: 短变量的方式
	// 不使用var声明变量。":="即：第一次声明变量。
	// 注意：var可以声明全局变量，而":="只能声明局部变量(在函数内使用)
	user := "ybxb"
	fmt.Println("user:", user)
	fmt.Println("user:", reflect.TypeOf(user))

	// 方式4: 声明多个变量
	// 一次声明多个变量，并赋值
	// 注意：只能声明一种类型的变量，不能申请多种类型的变量。
	var username, gender string = "ybxb", "男"
	fmt.Println(username, gender)

	// 方式5:批量声明变量
	var (
		id        int
		clazzName string
	)
	clazzName = "软件工程202501"
	id = 18
	fmt.Println(id, clazzName)
}
